/*===============================================
*   文件名称：file_sample.c
*   创 建 者：宁志鹏     
*   创建日期：2025年01月03日
*   描    述：linux下系统对文件操作的API例子
================================================*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <unistd.h>

/*
头文件
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

pathname：要打开的文件名（含路径）

flags ： 

 O_RDONLY 只读打开，O_WRONLY 只写打开，O_RDWR 可读可写打开

当我们附带了权限后,打开的文件就只能按照这种权限来操作。

以上这三个参数中应当只指定一个。下列参数是可选择的:

1.O-CREAT    ：若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode.用其说明该新文件的存取许可权限。
2.O_EXCL      ：以这种属性去打开文件时，如果同时指定了O_CREAT，而文件已经存在，则打开文件失败（也可以说返回值是-1）。
3.O_APPEND ：以这种属性去打开文件时，每次写时都加到文件的尾端。(不想写入时文件被覆盖，用这个flag，正常写入没有加其他条件的话，原来文件中的数据内容会被覆盖，注意是覆盖，覆盖本身的字节长度，没有覆盖的会保留，不是删除)
4.O_TRUNC   ：以这种属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0，通俗点的意思就是把原来的文件中的内容干掉，写入你自己要的数据内容
Mode：一定是在flags中使用了 O-CREAT 标志,mode 记录待创建的文件的访问权限，（比如：给的是0600时，则文件所有者给的权限是 可读可写

*/
int open(const char *pathname, int flags, mode_t mode);

/*
头文件
        #include <unistd.h>
int fd ：文件描述符
const void *buf ：一个无类型的指针buf，是一个缓冲区
size_t count：你要写入文件的大小

RETURN VALUE
       On  success,  the  number of bytes written is returned (zero indicates nothing was written).  On error, -1 is returned, and errno is set appropriately.
       如果成功，将返回写入的字节数 (0表示没有写入任何内容)。出现错误时，返回-1，并适当地设置errno

*/
ssize_t write(int fd, const void *buf, size_t count);

/*
头文件
           #include <unistd.h>
int fd ：文件描述符
const void *buf ：一个无类型的指针buf，是一个缓冲区
size_t count：你要读取文件的大小
*/
ssize_t read(int fd, void *buf, size_t count);

/*
头文件
        #include <sys/types.h>
        #include <unistd.h>
int fd ：文件描述符
off_t offset：偏移多少个字节
int whence：光标偏移位置

给whence参数设定偏移位置：

SEEK_SET：光标偏移到头

SEEK_CUR：光标为当前位置

SEEK_END：光标偏移到末尾

*/
off_t lseek(int fd, off_t offset, int whence);




